Spreadsheet application programs allow the manipulation of numeric and string data in a grid of rows and columns of cells. The value of a particular cell can be calculated based upon a formula which may include the values of other cells. Typically, the value of a cell is recalculated whenever a value of another cell upon which it depends changes. Moreover, different formats may be applied to different cells or groups of cells. Because of their ease of use and powerful features in processing and analyzing numerical data, spreadsheet application programs are widely used in the financial and scientific communities.
Spreadsheet application programs are equipped to easily handle most types of numerical and string data. However, current spreadsheet application programs are not equipped to handle asynchronous data in an easy or robust manner. Asynchronous data is data that does not change on a regular, determinable basis. For instance, one type of asynchronous data is real-time stock price data. The price of a stock may change constantly over the course of a day, or it may not change at all. Prior art solutions for handling asynchronous data in spreadsheet application programs have a number of serious shortcomings that cause it to be very difficult to integrate asynchronous data into a spreadsheet.
One previous method for accessing asynchronous data in a spreadsheet application program utilizes a “push” mechanism to transfer asynchronous data to the spreadsheet application program. With a push mechanism, asynchronous data is “pushed” from its source into the spreadsheet application program as the data becomes available. While this type of mechanism works for some applications, it does suffer from a number of problems that limit its usefulness.
One problem with push mechanisms is that they often try to push data into the spreadsheet application program when the spreadsheet application program is not ready for the data. For instance, the spreadsheet application program may be busy doing a calculation or displaying a modal dialog box. In such a situation, the spreadsheet application program will usually fail to receive the data. This is particularly problematic for time critical data that is ignored if the push occurs while the spreadsheet application program is busy and unable to receive the asynchronous data.
Another previous method for accessing asynchronous data in a spreadsheet application program utilizes a “pull” mechanism to transfer asynchronous data to the spreadsheet application program. With a pull mechanism, the spreadsheet application program periodically queries the source of the asynchronous data for updates. The pull mechanism solves the problem with push mechanisms described above because the spreadsheet application program is always ready to receive the data after making a request. However, the pull mechanism suffers from another drawback in that the spreadsheet application program will request asynchronous data even when no data is available. Constantly requesting data in this manner is computationally expensive. Moreover, changes in the asynchronous data may be missed by the spreadsheet application program if the data change occurs between requests. Accordingly, the pull mechanism for transferring asynchronous data into a spreadsheet application program is also problematic.
Therefore, in light of the above, there is a need for a method and system for providing access to asynchronous data in a spreadsheet application program in which a request for asynchronous data is not made if no data is available. Moreover, there is a need for a method and system for providing access to asynchronous data in a spreadsheet application program that allows a spreadsheet application program to be notified that data is available, even when the spreadsheet application program is busy performing other processing, and that will not result in lost data if the notification is made while the spreadsheet application program is busy performing other processing.